2. 创建MultiAssayExperiment对象
本章节主要介绍如何将多组学项目数据导入分析流程。
2.1 创建多组学项目的MultiAssayExperiment对象
当用户处理多个组学项目的数据时,需要将数据导入并组合成一个MAE
对象。

2.1.1 创建组学样本编号与受试者编号关系表
在研究中,每名受试者都具有唯一的受试者编号(例如:P1,P2,P3...),每名受试者可能会采集多种生物样本,测得多种组学项目的数据,包括16s rRNA基因测序的物种注释(taxonomy)、微生物功能基因的KO注释(geno_ko)、微生物功能基因的ec酶注释(geno_ec)等。在分析单一或多个组学项目的数据时,多数情况下受试者编号和组学项目样本编号是相同的(例如:受试者编号为P1,组学项目名称为taxonomy,组学项目样本编号为P1)。但有时候我们也会面临以下几种情况:
- 仅为单一组学项目:受试者编号和组学项目样本编号不一致(例如:受试者编号为P1,组学项目名称为taxonomy,组学项目样本编号为tax_1);
- 包含多个组学项目:同一名受试者中,不同组学项目的样本编号不一致(例如:受试者编号为P1;组学项目名称为taxonomy,对应的组学项目样本编号为tax_1;组学项目名称为geno_ko,对应的组学项目样本编号为genomics_1)。
因此,为了有效地管理和分析这些数据,用户需要建立一张关系表(通常命名为dfmap
,用户也可以自行命名),将受试者编号与组学项目样本编号对应起来。基于关系表,用户才能将所有数据顺利地导入到 MultiAssayExperiment
对象中。在后续的分析过程中,EasyMultiProfiler
包会自动根据关系表,将组学项目数据中的样本编号自动替换为受试者编号。
以关系表为基础的分析流程具有以下优势:
- 数据整合与一致性: 通过关系表,可以确保不同组学项目的数据集中的样本信息被正确地映射和整合,从而保证数据的一致性。
- 自动化处理: 可以自动化地管理和处理数据,无需手动修改,因此不用担心出现命名不一致的情况。
- 简化分析流程: 将数据整合并自动将样本编号替换为受试者编号后,分析流程更为流畅和清晰,减少了手动处理可能导致的错误。
请勿混淆“组学项目名称”、“受试者编号”和“组学项目样本编号”。

🏷️示例:创建受试者编号与组学项目样本编号的关系表。

此表需要保存为文件,读入R中。用户也可以手动在R内通过数据框直接创建。
dfmap <- read.table('dfmap.txt',header=TRUE,sep='\t')
①关系表必须由以下三列组成:assay(组学项目名称)、primary(受试者编号)、colname(组学项目样本编号)。
②组学项目样本编号(例如:本教程中的tax_1、genomics_1等)是由上游注释流程产生,一般不需要用户做特别修改。
③允许组学项目样本编号与受试者编号一致(例如:受试者编号为P1,组学项目名称为taxonomy,组学项目样本编号为P1)。
④每个组学项目的样本编号(或与样本编号对应的受试者编号)必须是样本相关数据受试者编号的子集(或完全相同)。如果组学项目中的样本编号在样本相关数据受试者编号中无对应,应当在这些组学项目中剔除这些样本编号。
⑤每个组学项目的样本编号必须与关系表的colname逐一对应。
⑥同一批受试者干预前后组学项目数据的编号方案,请参考10.3章节。
2.1.2 读取样本相关数据注意事项
样本相关数据是指受试者的基本信息,通常包括:受试者的一般人口学资料(性别、年龄、居住地等)、人体测量学资料(身高、体重、腰围等)、心理量表评分结果(焦虑量表、抑郁量表、睡眠量表等)、检验结果(血常规、肝功能、炎性因子等)等。
①样本相关数据中如果存在缺失值,请直接置空,不要用NA、-、missing等字符占位。
②样本相关数据的第一列请设置为样本编号,在读取时将其设置为行名(重要)。
③样本编号必须是唯一的,不能有重复。
④建议将数据中分类变量的取值设置为字符串,不要使用纯数字,避免引发不必要的问题。
⑤同一批受试者干预前后组学项目数据的编号方案,请参考10.3章节。
⑥样本名称请勿使用(-,^)等R不便于识别的符号,必要时使用下划线(_)替代。
## row.names=1 必须将样本名作为行名
meta_data <- read.table('col.txt',header = T,row.names = 1)
2.1.3 读取微生物组学数据
微生物组学数据是指通过各种微生物上游注释工具产出的、包含各个样本内微生物丰度信息的结果文件。常见的结果文件包括以下五种类型:ASV/OTU表格、界门纲目科属种级别丰度表、MetaPhlan和Humann产生的带有层级关系的丰度表、BIOM文件、QIIME2专属的QZV文件。模块EMP_taxonomy_import
支持以上全部格式的结果文件输入,并将其转化为SummmariseExperiment
对象。
2.1.3.1 ASV/OTU表格
此文件内第一行和第二行的#
字符无需修改。数据文件内必须要包含taxonomy
的物种注释信息。
①该数据文件必须包含名为
taxonomy
列。②
taxonomy
列必须包含微生物注释列。③建议使用
;
对微生物注释进行分割。
tax_data <- EMP_taxonomy_import('tax.txt',duplicate_feature=TRUE)
2.1.3.2 门纲目科属种级别丰度表
由于高分类级别数据可以转换为低分类级别数据(例如:Species数据可转换为Phylum数据),因此建议用户直接导入最高分类级别的数据。
模块
EMP_taxonomy_import
的参数assay_name
默认为counts(绝对丰度);如果实际数据为相对丰度,可输入relative(相对丰度)。
tax_data <- EMP_taxonomy_import('tax.txt')
2.1.3.3 MetaPhlan和Humann的分类注释表
此注释表的物种注释具有层级结构,通常包含界门纲目科属种各级别的全部结果信息。模块EMP_taxonomy_import
可以自动识别最高分类级别的注释信息,并导入完整分类数据。
输入的数据为此种格式时,需要将在模块
EMP_taxonomy_import
内指定参数humann_format=TRUE
。
tax_data <- EMP_taxonomy_import('tax.txt',humann_format=TRUE)
2.1.3.4 Biom格式文件
Biom格式是QIIME1流程中常见的物种注释结果文件,部分用户也会将QIIME2流程的物种注释文件保存为biom格式便于数据存储。模块EMP_taxonomy_import
可以直接读取biom格式文件,并导入数据信息。
输入的数据为此种格式时,需要将在模块
EMP_taxonomy_import
内指定file_format='biom'
。
tax_data <- EMP_taxonomy_import('tax.biom',
file_format='biom',duplicate_feature=TRUE)
2.1.3.5 Biom格式文件转化后的表格文件
Biom文件可以利用biom convert方法转换成表格文件,也可以直接导入。
输入的数据为此种格式时,无需修改表头和#符号。
tax_data <- EMP_taxonomy_import('tax.txt',duplicate_feature=TRUE)
2.1.3.6 qzv格式文件
在Qiime2流程qiime taxa barplot
会产生微生物注释结果qzv文件。模块EMP_taxonomy_import
可以直接读取qzv格式文件,并导入数据信息。
输入的数据为此种格式时,需要将在模块
EMP_taxonomy_import
内指定file_format='qzv'
。
tax_data <- EMP_taxonomy_import('tax.qzv',
file_format='qzv',duplicate_feature=TRUE)
2.1.4 读取KO/EC组学数据
2.1.4.1 普通表格形式
普通格式的KO/EC组学项目数据是指宏基因组或宏转录组学注释的、以KO或EC编号注释的结果文件。模块EMP_function_import
可以直接读取注释表格,并查询KEGG数据库整合对应的注释信息。
①编码中必须是纯KO和EC编号,例如:不能为KO:K00010,而必须仅为K00010;不能为ec:1.1.1.1,而必须仅为1.1.1.1。
②模块
EMP_function_import
内参数assay_name
默认为counts(绝对丰度),用户需要根据实际数据输入TPM、FPKM等。


ko_data <- EMP_function_import('ko.txt',type = 'ko')
ec_data <- EMP_function_import('ec.txt',type = 'ec')
2.1.4.1 Humann格式
Humann格式的KO/EC组学项目数据是指由Humann工具产生的分层KO/EC注释表。模块EMP_function_import
会忽略UNGROUPED
的信息,直接读取注释表格,并查询KEGG数据库整合对应的注释信息。
文件的表头需要清理干净,删除#等字符。
ko_data <- EMP_function_import('ko.txt',type = 'ko',humann_format = TRUE)
2.1.5 读取标准表格信息
标准表格数据通常是指转录组或代谢组等数据,这类数据没有特殊格式,可直接导入。
2.1.5.1 不含特征注释信息的数据导入
本数据常见于转录组或基因组数据,“行”为特征,“列”为样本。
tran_data <- EMP_normal_import('tran.txt')
2.1.5.2 包含特征注释信息的数据导入
本数据常见于代谢组学数据,“行”为特征,“列”为样本编号和特征相关注释。导入这种数据时,需要指定样本编号列。
①可直接通过
sampleID
指定样本编号。②可直接通过关系表指定样本编号。
# 直接指定样本编号
sample_ID <-c("Control1", "Control10", "Control2", "Control3", "Control4",
"Control5", "Control6", "Control7", "Control8", "Control9",
"Treat10", "Treat1", "Treat2", "Treat3", "Treat4", "Treat5",
"Treat6", "Treat7", "Treat8", "Treat9")
metbol_data <- EMP_normal_import('metabol.txt',sampleID = sample_ID)
# 利用关系表来判断样本编号
metbol_data <- EMP_normal_import('metabol.txt',sampleID = sample_ID,
dfmap = dfmap,assay = 'untarget_metabol')
2.1.6 整合全部数据导入MultiAssayExperiment对象
①本示例中的dfmap即2.1.1中的关系表。
②关系表内的
assay
必须转换为因子。③
objlist
内命名必须与关系表assay
列的组学项目名称一致。④如组装失败,可以用模块
MultiAssayExperiment::prepMultiAssay(objlist,meta_data,dfmap)
检查数据情况。⑤更多有关
MultiAssayExperiment
包的详细信息可以参考此教程。
#### 关系表的assay必须转换为因子
dfmap$assay <- as.factor(dfmap$assay)
#### objlist内命名必须与关系表assay列的组学项目名称一致
objlist <- list("taxonomy" = tax_data,
"geno_ko" = ko_data,
"geno_ec" = ec_data,
"untarget_metabol" = metbol_data,
"host_gene" = geno_data)
MAE <- MultiAssayExperiment::MultiAssayExperiment(experiments=objlist,
colData=meta_data,
sampleMap=dfmap)
2.2 快速创建单组学项目的MultiAssayExperiment对象
当用户只有单一的组学项目数据(例如:微生物组学项目数据或转录组学项目数据),可通过模块EMP_easy_import
快速构建MAE
对象,直接进行下游分析流程。
①
type
参数包含tax
、ko
、ec
和normal
四种方式,需要用户根据上文判断使用。②由于单一组学项目不涉及创建关系表,因此丰度矩阵的样本编号必须与样本相关数据中的样本编号一致。
## row.names=1 必须将样本编号作为行名
meta_data <- read.table('col.txt',header = T,row.names = 1)
MAE <- EMP_easy_import('tran.txt',coldata = meta_data,type = 'normal')
MAE <- EMP_easy_import('tax.txt',coldata = meta_data,type = 'tax')
MAE <- EMP_easy_import('ko.txt',coldata = meta_data,type = 'ko')
2.3 MultiAssayExperiment对象存放与读取
当创建完成MAE
对象后,可以将其存入本地以便下次分析时直接读取,而无需重复创建步骤。
在存储前,请务必正确设置R的本地工作目录,数据文件将存储在该工作目录下。
# Save in your working diectory
saveRDS(MAE,file = 'MAE.rds')
# Load the object
MAE <- readRDS(file = 'MAE.rds')
2.4 示例数据以及脚本
示例数据:下载地址
library(EasyMultiProfiler)
## 加载表型数据
meta_data <- read.table('coldata.txt',header = T,row.names = 1)
## 加载样本表
dfmap <-read.table('dfmap.txt',header = T) %>%
dplyr::mutate(assay = factor(assay))
## 加载组学数据
tax_data <- EMP_taxonomy_import('tax.txt')
ko_data <- EMP_function_import('ko.txt',type = 'ko')
ec_data <- EMP_function_import('ec.txt',type = 'ec')
metbol_data <- EMP_normal_import('metabol.txt',dfmap = dfmap,assay = 'untarget_metabol')
geno_data <- EMP_normal_import('tran.txt',dfmap = dfmap,assay = 'host_gene')
## 组合成列表
objlist <- list("taxonomy" = tax_data,
"geno_ko" = ko_data,
"geno_ec" = ec_data,
"untarget_metabol" = metbol_data,
"host_gene" = geno_data
)
## 创建MAE对象
MAE <- MultiAssayExperiment::MultiAssayExperiment(objlist, meta_data, dfmap)
## 存储数据对象以备下次分析使用
saveRDS(object = MAE,file = 'demo_data.rds')
## 下次分析时直接读取对象,而无需再次组装
MAE <- readRDS('demo_data.rds')